gsk: Store blend mode in the render node
authorEmmanuele Bassi <ebassi@gnome.org>
Fri, 1 Jul 2016 11:12:30 +0000 (12:12 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Tue, 18 Oct 2016 10:49:07 +0000 (11:49 +0100)
gsk/gskrendernode.c
gsk/gskrendernode.h
gsk/gskrendernodeprivate.h

index 2de6506e3823bab690bf93d07e7ae56d379d3f1e..b9ab33027a00a4b27ea882f56ec87c3eefb26312 100644 (file)
@@ -1226,6 +1226,49 @@ gsk_render_node_set_name (GskRenderNode *node,
   node->name = g_strdup (name);
 }
 
+/**
+ * gsk_render_node_set_blend_mode:
+ * @node: a #GskRenderNode
+ * @blend_mode: the blend mode to be applied to the node's children
+ *
+ * Sets the blend mode to be used when rendering the children
+ * of the @node.
+ *
+ * The default value is %GSK_BLEND_MODE_DEFAULT.
+ *
+ * Since: 3.22
+ */
+void
+gsk_render_node_set_blend_mode (GskRenderNode *node,
+                                GskBlendMode   blend_mode)
+{
+  g_return_if_fail (GSK_IS_RENDER_NODE (node));
+  g_return_if_fail (!node->is_mutable);
+
+  if (node->blend_mode == blend_mode)
+    return;
+
+  node->blend_mode = blend_mode;
+}
+
+/**
+ * gsk_render_node_get_blend_mode:
+ * @node: a #GskRenderNode
+ *
+ * Retrieves the blend mode set by gsk_render_node_set_blend_mode().
+ *
+ * Returns: the blend mode
+ *
+ * Since: 3.22
+ */
+GskBlendMode
+gsk_render_node_get_blend_mode (GskRenderNode *node)
+{
+  g_return_val_if_fail (GSK_IS_RENDER_NODE (node), GSK_BLEND_MODE_DEFAULT);
+
+  return node->blend_mode;
+}
+
 /**
  * gsk_render_node_get_draw_context:
  * @node: a #GskRenderNode
index d8b57e29dd335e48b6115a114647a0c6389f6926..a4709ff453778546a03ae6f16f9b856080eb36f5 100644 (file)
@@ -115,6 +115,12 @@ gboolean                gsk_render_node_is_opaque               (GskRenderNode *
 GDK_AVAILABLE_IN_3_22
 cairo_t *               gsk_render_node_get_draw_context        (GskRenderNode   *node);
 
+GDK_AVAILABLE_IN_3_22
+void                    gsk_render_node_set_blend_mode          (GskRenderNode *node,
+                                                                 GskBlendMode   blend_mode);
+GDK_AVAILABLE_IN_3_22
+GskBlendMode            gsk_render_node_get_blend_mode          (GskRenderNode *node);
+
 GDK_AVAILABLE_IN_3_22
 void                    gsk_render_node_set_name                (GskRenderNode *node,
                                                                  const char    *name);
index 7aa100b986968cb55e0a519e955d1b458903a9c0..9893f962c110e78b795f95cab1395ae7e7b55d8e 100644 (file)
@@ -37,6 +37,9 @@ struct _GskRenderNode
   /* Paint opacity */
   double opacity;
 
+  /* Blend mode */
+  GskBlendMode blend_mode;
+
   /* Clip rectangle */
   graphene_rect_t bounds;